// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.provide("erpnext.accounts.dimensions");

frappe.ui.form.on("Budget CN", {
    onload: function (frm) {
        // 账户查询过滤（增加预算项目关联）
        frm.set_query("account", "accounts", function () {
            return {
                filters: {
                    company: frm.doc.company,
                    report_type: "Profit and Loss",
                    is_group: 0,
                },
            };
        });

        // 月度分配查询过滤
        frm.set_query("monthly_distribution", function () {
            return {
                filters: {
                    fiscal_year: frm.doc.fiscal_year,
                },
            };
        });

        // 预提模板查询过滤（新增）
        frm.set_query("accrual_journal_template", function () {
            return {
                filters: {
                    company: frm.doc.company,
                },
            };
        });

        // 预算项目查询过滤（新增）
        frm.set_query("budget_item", "accounts", function () {
            return {
                filters: {
                    company: frm.doc.company,
                },
            };
        });

        erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
    },

    refresh: function (frm) {
        frm.trigger("toggle_reqd_fields");
        // 显示预提相关字段状态（新增）
        frm.trigger("toggle_accrual_fields");
    },

    budget_against: function (frm) {
        frm.trigger("set_null_value");
        frm.trigger("toggle_reqd_fields");
    },

    // 预提开关状态变化时触发（新增）
    enable_accrual: function (frm) {
        frm.trigger("toggle_accrual_fields");
    },

    set_null_value: function (frm) {
        if (frm.doc.budget_against == "Cost Center") {
            frm.set_value("project", null);
        } else {
            frm.set_value("cost_center", null);
        }
    },

    toggle_reqd_fields: function (frm) {
        frm.toggle_reqd("cost_center", frm.doc.budget_against == "Cost Center");
        frm.toggle_reqd("project", frm.doc.budget_against == "Project");
    },

    // 控制预提字段显示/必填（新增）
    toggle_accrual_fields: function (frm) {
        const is_accrual_enabled = frm.doc.enable_accrual === 1;
        frm.toggle_display("accrual_day", is_accrual_enabled);
        frm.toggle_display("accrual_journal_template", is_accrual_enabled);
        frm.toggle_reqd("accrual_day", is_accrual_enabled);
        frm.toggle_reqd("accrual_journal_template", is_accrual_enabled);
    },
});

// 在原有budget.js基础上添加以下逻辑
frappe.ui.form.on("Budget", {
    // 当子表新增行时，自动填充主表的默认值
    "accounts_add": function(frm, cdt, cdn) {
        const child = locals[cdt][cdn];
        // 传递主表Cost Center到子表
        if (frm.doc.cost_center) {
            frappe.model.set_value(cdt, cdn, "cost_center", frm.doc.cost_center);
        }
        // 传递主表Monthly Distribution到子表
        if (frm.doc.monthly_distribution) {
            frappe.model.set_value(cdt, cdn, "monthly_distribution", frm.doc.monthly_distribution);
        }
        // 传递主表Accrual Journal Template到子表
        if (frm.doc.accrual_journal_template) {
            frappe.model.set_value(cdt, cdn, "accrual_journal_template", frm.doc.accrual_journal_template);
        }
    },
// 当主表字段变化时，更新现有子表的默认值（可选逻辑，根据需求决定）
    "cost_center": function(frm) {
        frm.doc.accounts.forEach(row => {
            if (!row.cost_center) {
// 仅更新未手动修改过的子表行
                frappe.model.set_value(row.doctype, row.name, "cost_center", frm.doc.cost_center);
            }
        });
    },
    "monthly_distribution": function(frm) {
        frm.doc.accounts.forEach(row => {
            if (!row.monthly_distribution) {
// 仅更新未手动修改过的子表行
                frappe.model.set_value(row.doctype, row.name, "monthly_distribution", frm.doc.monthly_distribution);
            }
        });
    },
    "accrual_journal_template": function(frm) {
        frm.doc.accounts.forEach(row => {
            if (!row.accrual_journal_template) {
// 仅更新未手动修改过的子表行
                frappe.model.set_value(row.doctype, row.name, "accrual_journal_template", frm.doc.accrual_journal_template);
            }
        });
    }
});